/**
 * Description:
 * Class Name:RealGenericMethod
 * Date:2022/3/25 14:28
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第9章_泛型._9_4_泛型方法._9_4_1_定义泛型方法;

import java.util.ArrayList;
import java.util.Collection;

public class RealGenericMethod {
    // 声明一个泛型方法，该泛型方法中带一个T泛型形参
    static <T> void fromArrayToCollection(T[] a, Collection<T> c){
        for(var o: a) c.add(o);
    }

    public static void main(String[] args) {
        Object[] oa = new Object[100];
        Collection<Object> co = new ArrayList<>();
        // 下面代码中T代表Object类型
        fromArrayToCollection(oa, co);

        String[] sa = new String[100];
        Collection<String> cs = new ArrayList<>();
        // 下面代码中T代表String类型
        fromArrayToCollection(sa, cs);
        // 下面代码中T代表Object类型
        fromArrayToCollection(sa, co);

        var ia = new Integer[100];
        var fa = new Float[100];
        var na = new Number[100];
        Collection<Number> cn = new ArrayList<>();
        // 下面代码中T代表Number类型
        fromArrayToCollection(ia, cn);
        // 下面代码中T代表Number类型
        fromArrayToCollection(fa, cn);
        // 下面代码中T代表Number类型
        fromArrayToCollection(na, cn);
        // 下面代码中T代表Object类型
        fromArrayToCollection(na, co);
        // 下面代码中T代表String类型，但na是一个Number数组
        // 因为Number既不是String类型，也不是它的子类，所以出现了编译错误
//        fromArrayToCollection(na, cs);
    }
}
